﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sy3_3
{
    class Rect
    {
        // 受保护的成员（允许派生类访问）
        protected double length;
        protected double width;

        // 构造函数：给长、宽赋初值
        public Rect(double len, double wid)
        {
            length = len;
            width = wid;
        }

        // 计算矩形面积
        public virtual double GetArea()
        {
            return length * width;
        }

        // 计算矩形周长
        public double GetPerimeter()
        {
            return 2 * (length + width);
        }
    }

    // 派生类：矩体类 Cuboid（继承自 Rect）
    class Cuboid : Rect
    {
        // 新增数据成员：高
        private double height;

        // 构造函数：初始化长、宽（继承自基类）和高
        public Cuboid(double len, double wid, double hgt) : base(len, wid)
        {
            height = hgt;
        }

        // 重写基类的 GetArea 方法（计算矩体表面积）
        public override double GetArea()
        {
            return 2 * (length * width + length * height + width * height);
        }

        // 计算矩体体积
        public double GetVolume()
        {
            return length * width * height;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 输入矩形的长和宽
            Console.Write("请输入矩形长：");
            double len = double.Parse(Console.ReadLine());

            Console.Write("请输入矩形宽：");
            double wid = double.Parse(Console.ReadLine());

            // 创建矩形对象并输出面积、周长
            Rect rect = new Rect(len, wid);
            Console.WriteLine($"解：矩形面积为 {rect.GetArea()} ，周长为 {rect.GetPerimeter()} 。");

            // 输入矩体的高
            Console.WriteLine("\n===在此基础上构造矩体===");
            Console.Write("请输入矩体高：");
            double hgt = double.Parse(Console.ReadLine());

            // 创建矩体对象并输出表面积、体积
            Cuboid cuboid = new Cuboid(len, wid, hgt);
            Console.WriteLine($"解：矩体表面积为 {cuboid.GetArea()} ，体积为 {cuboid.GetVolume()} 。");

            Console.WriteLine("\n按任意键结束程序：");
            Console.ReadKey();
        }
    }
}
